/**
 * 引用数据类型和参数传递的是值还是指针
 */

let obj = {
    name: 'ck',
    age: 10,
    cars: ["BMW", "BENZ", "AUDI"]
}


// 引用数据类型， 传递的是指向堆的栈中的那个地址， 也就是那个指针。
// 所以，如果引用数据被修改后， 其中的值是会被修改的， 因为传递进去的是原来值的地址。
function changeObj(obj) {
    obj.name = '1111111'
    obj.cars.pop()
}


console.log(obj.name) // ck
console.log(obj.cars);// [ 'BMW', 'BENZ', 'AUDI' ]

changeObj(obj)
console.log(obj.name) // 11111111111111111111111
console.log(obj.cars); // [ 'BMW', 'BENZ' ]


// 引用数据类型作为参数， 传递的还是值， 但是这个值是引用数据类型的第一个地址。

const objCK = {name: 'ck'}

function setName(obj) {
    obj.name = 'kb'
    // 将obj引用指针指向了新的一个对象上
    obj = new Object()
    obj.name = 'new'
}

console.log(objCK.name) // ck
setName(objCK)
// 如果这里是按照引用传递，那么，下面的输出应该是new
console.log(objCK.name) // kb
